package Text4;

import java.util.*;

public class Main {
    //    输入格式:第一行一个正整数 N，含义如题面所述。
//    第二行一个正整数 Ma，表示 X进制数 A 的位数。
//    第三行 Ma个用空格分开的整数，表示 X进制数 A按从高位到低位顺序各个数位上的数字在十进制下的表示。
//    第四行一个正整数 Mb，表示 X进制数 B 的位数。
//    第五行 Mb个用空格分开的整数，表示 X进制数 B按从高位到低位顺序各个数位上的数字在十进制下的表示。
//    请注意，输入中的所有数字都是十进制的。
//    输出格式:
//    输出一行一个整数，表示 X进制数 A−B 的结果的最小可能值转换为十进制后再模 1000000007的结果。
    //对于 100%的数据，2≤N≤1000;1≤Ma,Mb≤100000;A≥B。
    //请注意，你需要保证 A和 B在 X进制下都是合法的，即每一数位上的数字要小于其进制。
    static int N = 100010, mod = 1000000007;
    ;
    static long[] mul = new long[N];
    static long[] a = new long[N];
    static long[] b = new long[N];
    static long[] p = new long[N];//不包括本身前面的p相乘

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int Ma = in.nextInt();
        for (int i = Ma - 1; i >= 0; i--) {
            a[i] = in.nextInt();
        }
        int Mb = in.nextInt();
        for (int i = Mb - 1; i >= 0; i--) {
            b[i] = in.nextInt();
        }
        int m = Math.max(Ma, Mb);
        // 确定各位进制
        for (int i = 0; i < m; i++) {
            long max = Math.max(a[i], b[i]);
            p[i] = Math.max(max + 1, 2);
        }
        // 计算权重
        mul[0] = 1;
        for (int i = 1; i < m; i++) {
            mul[i] = p[i - 1] * mul[i - 1] % mod;
        }
        // 计算A
        long A = 0;
        for (int i = 0; i < Ma; i++) {
            A += a[i] * mul[i] % mod;
        }
        // 计算B
        long B = 0;
        for (int i = 0; i < Ma; i++) {
            B += b[i] * mul[i] % mod;
        }
        //A-B
        System.out.println((A - B + mod) % mod);//A本来比B大，但是取模后小
    }
}
